'''
Created on 11/10/2012

@author: rcasal
'''
from repositories.i_repository import IRepository
from gluon.validators import IS_IN_DB
from gluon.dal import Field
from domain.entities.establecimiento import Establecimiento

class EstablecimientoCabeceraRepository(IRepository):
    

    '''
    classdocs
    '''

    def __init__(self, afiliaciones, T):
        '''
        Constructor
        '''
        self.__afiliaciones= afiliaciones
        self.__table = None
        self.__T = T
        
    def define_table(self, migrate = False):
        
        self.__afiliaciones.define_table('EstablecimientosCabeceras'
        ,Field('IDEstablecimiento', type = 'integer', required = True)
        ,Field('CUIT', type = 'string', length = 11, required = True)
        ,Field('RazonSocial', type = 'string', length = 11, required = True)
        ,primarykey=['IDEstablecimiento']
        ,migrate = migrate
        )
    
        self.__table = self.__afiliaciones['EstablecimientosCabeceras']
        self.add_requires()
        
    def add_requires(self):
        pass
        
    def save(self, entity):
        pass
    
    def delete(self, entity):
        pass
         
    def findAll(self):
        res = self.__afiliaciones(self.__afiliaciones.EstablecimientosCabeceras.IDEstablecimiento > 0).select()
        establecimientos = []
        for fields in res:
            establecimientos.append(Establecimiento.deserialize(fields))
        return establecimientos
    
    def findOne(self, idEst):
        res =  self.__afiliaciones(self.__afiliaciones.EstablecimientosCabeceras.IDEstablecimiento == idEst).select().last() 
        if res:
            return Establecimiento.deserialize(res)
        else:
            return None  
        
    def findByCuit(self, cuit):
        res =  self.__afiliaciones(self.__afiliaciones.EstablecimientosCabeceras.CUIT == cuit).select().last()
        if res:
            return Establecimiento.deserialize(res)
        else:
            return None 
    
     